<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        /* 
        Object.create(对象,配置对象);
        1.直接创建对象,把对象放在新创建对象的原型上
        
        */
        var obj = Object.create({
            name: "张三",
            age: 20
        });
        console.log(obj);
        //__proto__  和  [[prototype]] 是一样的 
        //  下划线 _  和 [[]]  表示书写私有属性,不希望直接更改

        /* 
        2.配置参数创建对象 
            对象的属性 是可控制的
        */
        var obj1 = Object.create(null, {
            name: {
                value: "张三",
                writeable: true, //配置 是否可写 ,默认是false
                enumerable: true, //配置 是否可枚举 ,默认是false
                configurable: true // 配置 是否可配置 (例:删除对象属性) ,默认是false
            },
            age: {
                value: 20,
                writeable: true,
                enumerable: true,
                configurable: true
            }
        })
        console.log(obj1); // {name: '张三', age: 20}
        obj1.name = "李四";
        console.log(obj1); // {name: '李四', age: 20}

        for (var key in obj1) {
            console.log(key); // name  age
        }

        delete obj1.name;
        console.log(obj1); // {age: 20}



        //3.通过存储器来配置  对象

        var obj2 = Object.create(null, {
            name: {
                //getter
                get: function () {
                    console.log("调用了get函数");
                    //获取属性值的时候  自动调用get方法
                    return "张三";
                },
                //setter
                set: function (newvalue) {
                    //设置属性的时候会自动调用set方法
                    console.log("修改了", newvalue);
                },
                configurable: true,
                enumerable: true
            }
        });
        console.log(obj2);
        //获取name的值,调用get函数
        obj2.name; // 调用了get函数

        //设置了定时器 自动调用
        setTimeout(() => {
            //设置name的值,调用set函数
            obj2.name = "李四";
        }, 2000);//修改了 李四
    </script>
</body>

</html>